--- title: "3692. Majority Frequency Characters" created: 2025-12-16 --- # 3692. Majority Frequency Characters ## 题目 [**3692. Majority Frequency Characters**](https://leetcode.com/problems/majority-frequency-characters/) ![[image-f8bc6ef4.png]] ## 思路分析 ## 代码实现 ```java import java.util.HashMap; import java.util.Map; class Solution { public String majorityFrequencyGroup(String s) { // 1. 统计每个字符出现的频率 (char -> frequency) char[] arr = s.toCharArray(); HashMap charCountMap = new HashMap<>(); for (char c : arr) { charCountMap.put(c, charCountMap.getOrDefault(c, 0) + 1); } // 2. 统计每个频率组有多少个不同的字符 (frequency -> count of chars) HashMap groupSizeMap = new HashMap<>(); for (int freq : charCountMap.values()) { groupSizeMap.put(freq, groupSizeMap.getOrDefault(freq, 0) + 1); } // 3. 找出符合条件的最佳频率 (targetK) int bestK = 0; // 记录最佳频率 int maxGroupSize = 0; // 记录当前最大的组人数 for (int k : groupSizeMap.keySet()) { int currentGroupSize = groupSizeMap.get(k); // 条件 A: 当前组的人数比之前的最大人数还多 -> 更新 if (currentGroupSize > maxGroupSize) { maxGroupSize = currentGroupSize; bestK = k; } // 条件 B: 当前组人数和最大人数一样多 (Tie),但频率 k 更大 -> 更新 else if (currentGroupSize == maxGroupSize) { if (k > bestK) { bestK = k; } } } // 4. 再次遍历,收集所有频率等于 bestK 的字符 StringBuilder sb = new StringBuilder(); for (char c : charCountMap.keySet()) { if (charCountMap.get(c) == bestK) { sb.append(c); } } return sb.toString(); } } ``` ```java class Solution { public String majorityFrequencyGroup(String s) { // 1. 统计字符频率 int[] charCounts = new int[26]; for (char c : s.toCharArray()) { charCounts[c - 'a']++; } // 2. 统计频率组的大小 (Map: freq -> groupSize) // 注意:频率最大也就是字符串的长度,所以这里也可以用数组,但用Map更直观 HashMap groupSizeMap = new HashMap<>(); for (int count : charCounts) { if (count > 0) { groupSizeMap.put(count, groupSizeMap.getOrDefault(count, 0) + 1); } } // 3. 找最佳频率 int bestK = 0; int maxGroupSize = 0; for (int k : groupSizeMap.keySet()) { int size = groupSizeMap.get(k); if (size > maxGroupSize || (size == maxGroupSize && k > bestK)) { maxGroupSize = size; bestK = k; } } // 4. 构建结果 StringBuilder sb = new StringBuilder(); for (int i = 0; i < 26; i++) { if (charCounts[i] == bestK) { sb.append((char)('a' + i)); } } return sb.toString(); } } ``` ## 同类题型 ## 视频讲解